package es.udc.acs.database;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import es.udc.acs.utils.PropertiesFile;

public class Database {
	
	private static final String NOMBREDRIVER = "nombredriver";
	private static final String URLDRIVER    = "urldriver";
	private static final String USER         = "user";
	private static final String PASS         = "pass";

	
	// singleton, solo hay un objeto database
	private static Database database;

	private Connection _conexion; 
	
	
	private Database() {}
	
	
    public static Database getInstancia() {
        if (database == null)
                  database = new Database();

        return database;
    }
    
    
    public Connection getConexion(){
    	
    	return _conexion;
    }
    
	
	public void establecerConexion() 
			throws ClassNotFoundException, SQLException, 
			        FileNotFoundException, IOException{
		
		if (_conexion == null) {
			
		    PropertiesFile conf = new PropertiesFile("db.properties");

		    String nombreDriver = conf.getValue(NOMBREDRIVER);
		    String user         = conf.getValue(USER);
		    String pass         = conf.getValue(PASS);
		    String urlDriver    = conf.getValue(URLDRIVER);
		    		    
		    // importar al proyecto
		    // /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/jdbc/lib/ojdbc14.jar
	        Class.forName(nombreDriver);
	        // conexión a la base de datos
	        _conexion = DriverManager.getConnection (urlDriver, user, pass);
	        
	        // evitamos problemas de concurrencia
	        _conexion.setTransactionIsolation(
	        		Connection.TRANSACTION_SERIALIZABLE);

	        
		} else 
			System.out.println(
					"Database:error:la conexión ya ha sido establecida");
	}

	
	
	public void cerrarConexion() {				

		if (_conexion != null) {
		    try {
		        _conexion.close();
		    } catch (SQLException e) {
				      e.printStackTrace();
		    }		    
		} else 
			System.out.println(
					"Database:error:la conexión no ha sido establecida");		    
	}
}
